home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 May / EnigmA AMIGA RUN 18 (1997)(G.R. Edizioni)(IT)[!][issue 1997-05][EAR-CD II].iso / programs / write / docs / write.atg < prev   
Text File  |  1996-09-16  |  7KB  |  697 lines

  1. COMPILER WRITE
  2.  
  3. (* ------------------------ Scanner ----------------------------------- *)
  4.  
  5. CHARACTERS
  6.  
  7.   letter      = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".
  8.   digit       = "0123456789" .
  9.   hexdigit    = digit + "ABCDEFabcdef".
  10.   eol         = CHR(10).
  11.   tab         = CHR(9).
  12.   stringchar1 = ANY - '"' - "\" - eol.
  13.   stringchar2 = ANY - "'" - "\" - eol.
  14.   stringchar3 = ANY - "`" - "\" - eol.
  15.   escchar     = ANY - eol.
  16.  
  17. TOKENS
  18.     (* Variablen fangen mit Unterstrich an. *)
  19.  
  20.   ident     = (letter | "_") {letter | digit | "_"}.
  21.   number    = digit {digit}.
  22.   hexnumber = "0x" hexdigit {hexdigit}.
  23.   tag       = "@" (letter | digit) {letter | digit}.
  24.   string    =   ('"' {stringchar1 | "\" escchar} '"')
  25.               | ("'" {stringchar2 | "\" escchar} "'")
  26.               | ("`" {stringchar3 | "\" escchar} "`").
  27.   rexxvar   = "&" (letter | digit) {letter | digit | "."}.
  28.   posmark   = "%" letter {letter}.
  29.   locale    = "$" (letter) {letter | digit | "_"}.
  30.  
  31. IGNORE  eol + tab
  32. IGNORE CASE
  33.  
  34. COMMENTS FROM "(*" TO "*)" NESTED
  35.  
  36. (* ------------------------ Parser ------------------------------------- *)
  37.  
  38. PRODUCTIONS
  39.  
  40.   WRITE
  41.  
  42.   =    Module
  43.      | Config
  44.      | Startup
  45.      | Locale
  46.      | Command
  47.   .
  48.  
  49.  
  50.   Module
  51.  
  52.   =
  53.     "MODULE"
  54.     Ident
  55.     ";"
  56.     {
  57.       Vars
  58.     | MacroDef ";"
  59.     | KeyDef   ";"
  60.     | MenuDef  ";"
  61.     }
  62.     Body
  63.     "END" Ident "."
  64.  
  65.   .
  66.  
  67.  
  68.   Config
  69.  
  70.   =
  71.     "CONFIG"
  72.  
  73.     Ident ";"
  74.     [ UseList ]
  75.     {
  76.       Vars
  77.     | Prefs
  78.     | UsrFkt   ";"
  79.     | Backup   ";"
  80.     | Template ";"
  81.     | Syntax   ";"
  82.     | Button   ";"
  83.     }
  84.     Body
  85.     "END" Ident "."
  86.   .
  87.  
  88.  
  89.   Startup
  90.  
  91.   =
  92.     "STARTUP" ";"
  93.  
  94.     {
  95.       Vars
  96.     | Prefs
  97.     | UsrFkt ";"
  98.     | HotKey ";"
  99.     | Mode   ";"
  100.     }
  101.     Body
  102.     "END" "."
  103.   .
  104.  
  105.  
  106.   Locale
  107.  
  108.   =
  109.     "LOCALE"
  110.     Ident ";"
  111.     [ LocaleStr ":=" StringVar
  112.       {
  113.         ";"
  114.         [
  115.           LocaleStr ":=" StringVar
  116.         ]
  117.       }
  118.     ]
  119.     "END" Ident
  120.     "."
  121.   .
  122.  
  123.  
  124.   Command
  125.  
  126.   =
  127.    (
  128.     {
  129.       Vars
  130.     | MacroDef ";"
  131.     }
  132.      "BEGIN"
  133.      [StatementSeq]
  134.      "END" "."
  135.    )
  136.    |
  137.    (
  138.      [StatementSeq] EOF
  139.    )
  140.   .
  141.  
  142.  
  143.   Prefs
  144.  
  145.   =
  146.    "PREFS" { PrefsDef ";" }
  147.   .
  148.  
  149.  
  150.   Vars
  151.  
  152.   =
  153.     "VAR" {VarDef ";"}
  154.   .
  155.  
  156.  
  157.   Body
  158.  
  159.   =
  160.     [ "BEGIN" [StatementSeq] ]
  161.     [ "CLOSE" [StatementSeq] ]
  162.   .
  163.  
  164.  
  165.   UseList
  166.  
  167.   =
  168.     "IMPORT" Ident
  169.     {
  170.       "," Ident
  171.     }
  172.     ";"
  173.   .
  174.  
  175.  
  176.   UsrFkt
  177.  
  178.   =
  179.     "HOOK" Ident [StatementSeq]
  180.     "END" Ident
  181.   .
  182.  
  183.  
  184.   Backup
  185.  
  186.   =
  187.     "BACKUP" Number StringVar StringVar
  188.   .
  189.  
  190.  
  191.   Template
  192.  
  193.   =
  194.     "TEMPLATE" StringVar
  195.     ["NOCASE" ]
  196.     ["AUTO" ]
  197.     [StatementSeq]
  198.     "END"
  199.   .
  200.  
  201.  
  202.   SyntaxDescr
  203.  
  204.   =
  205.     Number
  206.     Number
  207.     ["BOLD"  ]
  208.     ["ITALIC"  ]
  209.     ["UNDERLINED" ]
  210.   .
  211.  
  212.   Syntax
  213.  
  214.   =
  215.     (
  216.       "TOKEN"
  217.       StringVar
  218.       ["WORD" ]
  219.       SyntaxDescr
  220.     )
  221.     |
  222.     (
  223.       "STRING"
  224.       StringVar
  225.       StringVar
  226.       StringVar
  227.       SyntaxDescr
  228.     )
  229.     |
  230.     (
  231.       "PATTERN"
  232.       StringVar
  233.       SyntaxDescr
  234.     )
  235.     |
  236.     (
  237.       "COMMENT"
  238.       ["START"  ]
  239.       StringVar
  240.       StringVar
  241.       ["NESTED"  ]
  242.       SyntaxDescr
  243.     )
  244.   .
  245.  
  246.   Button
  247.  
  248.   =
  249.     (
  250.       "BUTTON"
  251.       StringVar
  252.       StatementSeq
  253.       "END"
  254.     )
  255.     |
  256.     (
  257.       "BUTTONSPACE"
  258.     )
  259.   .
  260.  
  261.   HotKey
  262.  
  263.   =
  264.     "HOTKEY" StringVar [StatementSeq]
  265.     "END"
  266.   .
  267.  
  268.  
  269.   Mode
  270.  
  271.   =
  272.     "MODE" StringVar StringVar
  273.   .
  274.  
  275.  
  276.   PrefsDef
  277.  
  278.   =
  279.     Identifier ":=" Expression
  280.   .
  281.  
  282.  
  283.   Type
  284.  
  285.   =
  286.     (
  287.        "POINT"
  288.      | "NUMBER"
  289.      | "STRING"
  290.     )
  291.   .
  292.  
  293.  
  294.   VarDef
  295.  
  296.   =
  297.     Ident [ "*"  ]
  298.     {
  299.       ","
  300.       Ident [ "*"  ]
  301.     }
  302.     ":"
  303.     Type
  304.   .
  305.  
  306.  
  307.   ParameterDef
  308.  
  309.   =
  310.     [ "VAR"  ]
  311.     Ident
  312.     {
  313.       ","
  314.       Ident
  315.     }
  316.     ":"
  317.     Type
  318.   .
  319.  
  320.  
  321.   MacroDef
  322.  
  323.   =
  324.     "PROCEDURE" Ident
  325.     [ "*"  ]
  326.     [
  327.       "(" [ ParameterDef { ";" ParameterDef }]")"
  328.       [ ":" Type  ]
  329.     ]
  330.     ";"
  331.     [
  332.       "VAR" VarDef { ";" [VarDef] }
  333.     ]
  334.     "BEGIN"
  335.     [StatementSeq ]
  336.     "END" Ident
  337.   .
  338.  
  339.  
  340.   KeyDef
  341.  
  342.   =
  343.       "KEY" StringVar [StatementSeq] "END"
  344.  
  345.     | "DOUBLEKEY" StringVar StringVar [StatementSeq] "END"
  346.   .
  347.  
  348.  
  349.   MenuDef
  350.  
  351.   =
  352.        "MENU" NiceString
  353.  
  354.      | "ITEM" NiceString NiceString [StatementSeq] "END"
  355.  
  356.      | "ITEMBAR"
  357.  
  358.      | "SUB" NiceString NiceString [StatementSeq] "END"
  359.  
  360.      | "SUBBAR"
  361.   .
  362.  
  363.   StatementSeq
  364.  
  365.   =
  366.     Statement
  367.     {
  368.       ";"
  369.       [
  370.         Statement
  371.        ]
  372.     }
  373.   .
  374.  
  375.  
  376.   Statement
  377.  
  378.   =
  379.       (
  380.         (
  381.           Designator
  382.         |
  383.           RexxVar
  384.         )
  385.         [
  386.           ":="
  387.           Expression
  388.         ]
  389.       )
  390.     | (
  391.         "IF"
  392.         Expression
  393.  
  394.         "THEN" [StatementSeq]
  395.         {
  396.           "ELSIF"
  397.           Expression
  398.           "THEN" [StatementSeq]
  399.         }
  400.  
  401.         [ "ELSE" [StatementSeq] ]
  402.         "END"
  403.       )
  404.  
  405.     | (
  406.         "WHILE"
  407.         Expression
  408.  
  409.         "DO"
  410.         [StatementSeq]
  411.         "END"
  412.       )
  413.  
  414.     | (
  415.         "REPEAT"
  416.         [StatementSeq]
  417.         "UNTIL"
  418.         Expression
  419.       )
  420.  
  421.     | (
  422.         "FOR"
  423.         Ident
  424.         ":="
  425.         Expression
  426.         "TO" Expression
  427.         [
  428.          "BY" Expression
  429.         ]
  430.         "DO"
  431.         [StatementSeq]
  432.         "END"
  433.       )
  434.  
  435.     | (
  436.         "LOOP"
  437.         StatementSeq
  438.         "END"
  439.       )
  440.  
  441.     | "EXIT"
  442.     | "RETURN"
  443.       [Expression]
  444.   .
  445.  
  446.  
  447.   Expression
  448.  
  449.   =
  450.     SimpleExpr
  451.     [
  452.      Relation
  453.      SimpleExpr
  454.     ]
  455.   .
  456.  
  457.  
  458.   SimpleExpr
  459.  
  460.   =
  461.     [
  462.        "-"
  463.     ]
  464.     Term
  465.  
  466.  
  467.     {
  468.       AddOp
  469.       Term
  470.     }
  471.   .
  472.  
  473.  
  474.   Term
  475.  
  476.   =
  477.     Factor
  478.     {
  479.       MulOp
  480.       Factor
  481.     }
  482.   .
  483.  
  484.  
  485.   Factor
  486.  
  487.   =
  488.       "STRING"
  489.       "("
  490.       Expression
  491.       ")"
  492.     | "NUMBER"
  493.       "("
  494.       Expression
  495.       ")"
  496.     | "FORMAT"
  497.       "("
  498.       Expression
  499.       {
  500.         ","
  501.         Expression
  502.       }
  503.       ")"
  504.     | "REGEXP"
  505.       "("
  506.       Expression
  507.       {
  508.         ","
  509.         Expression
  510.       }
  511.       ")"
  512.     | Designator
  513.     |
  514.       Number
  515.     |
  516.       StringVar
  517.     |
  518.       RexxVar
  519.     |
  520.       LocaleStr
  521.     | PointVar
  522.     | ("~" | "NOT"
  523.       ) Factor
  524.     | "(" Expression ")"
  525.   .
  526.  
  527.  
  528.   Designator
  529.  
  530.   =
  531.     Identifier
  532.     [
  533.       "["
  534.        Expression
  535.        [
  536.          ":" Expression
  537.        ]
  538.       "]"
  539.     ]
  540.     [
  541.       "(" [ ExprList ] ")"
  542.     ]
  543.     [
  544.       "{" TagList "}"
  545.     ]
  546.   .
  547.  
  548.  
  549.   StringVar
  550.  
  551.   =
  552.     string
  553.   .
  554.  
  555.  
  556.   PointVar
  557.  
  558.   =
  559.     "["
  560.         (  Expression
  561.          | PosMark
  562.         )
  563.         ","
  564.         (
  565.            Expression
  566.          | PosMark
  567.         )
  568.     "]"
  569.   .
  570.  
  571.  
  572.   PosMark
  573.  
  574.   =
  575.     posmark
  576.   .
  577.  
  578.  
  579.   Ident
  580.  
  581.   =
  582.     ident
  583.   .
  584.  
  585.  
  586.   LocaleStr
  587.  
  588.   =
  589.     locale
  590.   .
  591.  
  592.  
  593.   NiceString
  594.  
  595.   =
  596.     (
  597.       StringVar
  598.     )
  599.     |
  600.     ( LocaleStr
  601.     )
  602.   .
  603.  
  604.  
  605.   Identifier
  606.  
  607.   =
  608.     Ident
  609.     ["." Ident]
  610.   .
  611.  
  612.  
  613.   RexxVar
  614.  
  615.   =
  616.     rexxvar
  617.   .
  618.  
  619.  
  620.   Number
  621.  
  622.   =
  623.     (  number
  624.      | hexnumber
  625.     )
  626.   .
  627.  
  628.  
  629.   TagList
  630.  
  631.   =
  632.     Tag
  633.     { "," Tag  }
  634.   .
  635.  
  636.  
  637.   Tag
  638.  
  639.   =
  640.     TagVar
  641.     [
  642.       "=" Expression
  643.     ]
  644.   .
  645.  
  646.  
  647.   ExprList
  648.  
  649.   =
  650.     Expression
  651.     {
  652.       ","
  653.       Expression
  654.     }
  655.   .
  656.  
  657.   Relation
  658.  
  659.   =
  660.      "="
  661.    | "#"
  662.    | "<>"
  663.    | "<"
  664.    | "<="
  665.    | ">"
  666.    | ">="
  667.   .
  668.  
  669.  
  670.   AddOp
  671.  
  672.   =
  673.      "+"
  674.    | "-"
  675.    | "OR"
  676.    | "|"
  677.   .
  678.  
  679.  
  680.   MulOp
  681.  
  682.   =
  683.      "*"
  684.    | "DIV"
  685.    | "/"
  686.    | "MOD"
  687.    | "AND"
  688.   .
  689.  
  690.   TagVar
  691.  
  692.   =
  693.     tag
  694.   .
  695.  
  696. END WRITE.
  697.